import { defineStore } from 'pinia'

// 定义一个商店管理系统的store
export const useShopStore = defineStore('shop', {
  state: () => ({
    products: [
      { id: 1, name: '笔记本电脑', price: 5999, inventory: 10 },
      { id: 2, name: '智能手机', price: 3999, inventory: 15 },
      { id: 3, name: '耳机', price: 899, inventory: 20 }
    ],
    cart: [],
    user: {
      id: null,
      name: '',
      isLoggedIn: false,
      points: 0
    },
    orderHistory: []
  }),
  
  getters: {
    // 获取购物车中的商品总数
    cartItemCount() {
      return this.cart.reduce((total, item) => total + item.quantity, 0)
    },
    
    // 获取购物车中的商品总价
    cartTotalPrice() {
      return this.cart.reduce((total, item) => {
        const product = this.products.find(p => p.id === item.productId)
        return total + (product ? product.price * item.quantity : 0)
      }, 0)
    },
    
    // 获取用户是否已登录
    isAuthenticated() {
      return this.user.isLoggedIn
    }
  },
  
  actions: {
    // 添加商品到购物车
    addToCart(productId, quantity = 1) {
      // 检查商品是否存在
      const product = this.products.find(p => p.id === productId)
      if (!product) {
        throw new Error('商品不存在')
      }
      
      // 检查库存是否足够
      if (product.inventory < quantity) {
        throw new Error('库存不足')
      }
      
      // 查找购物车中是否已有该商品
      const cartItem = this.cart.find(item => item.productId === productId)
      
      if (cartItem) {
        // 如果购物车中已有该商品，增加数量
        cartItem.quantity += quantity
      } else {
        // 否则添加新商品到购物车
        this.cart.push({
          productId,
          quantity,
          addedAt: new Date()
        })
      }
      
      // 减少库存
      product.inventory -= quantity
      
      return { success: true, message: '已添加到购物车' }
    },
    
    // 从购物车移除商品
    removeFromCart(productId, quantity = null) {
      const index = this.cart.findIndex(item => item.productId === productId)
      
      if (index === -1) {
        return { success: false, message: '购物车中没有该商品' }
      }
      
      const cartItem = this.cart[index]
      const product = this.products.find(p => p.id === productId)
      
      if (quantity === null || quantity >= cartItem.quantity) {
        // 如果没有指定数量或数量大于等于购物车中的数量，移除整个商品
        this.cart.splice(index, 1)
        
        // 恢复库存
        if (product) {
          product.inventory += cartItem.quantity
        }
      } else {
        // 否则减少数量
        cartItem.quantity -= quantity
        
        // 恢复库存
        if (product) {
          product.inventory += quantity
        }
      }
      
      return { success: true, message: '已从购物车移除' }
    },
    
    // 清空购物车
    clearCart() {
      // 恢复所有商品的库存
      this.cart.forEach(item => {
        const product = this.products.find(p => p.id === item.productId)
        if (product) {
          product.inventory += item.quantity
        }
      })
      
      // 清空购物车
      this.cart = []
      
      return { success: true, message: '购物车已清空' }
    },
    
    // 用户登录
    async login(username, password) {
      // 模拟API请求延迟
      await new Promise(resolve => setTimeout(resolve, 500))
      
      // 简单的模拟登录逻辑，实际应用中应该调用API
      if (username && password) {
        this.user = {
          id: 1,
          name: username,
          isLoggedIn: true,
          points: 100
        }
        return { success: true, message: '登录成功' }
      } else {
        return { success: false, message: '用户名或密码不能为空' }
      }
    },
    
    // 用户登出
    logout() {
      this.user = {
        id: null,
        name: '',
        isLoggedIn: false,
        points: 0
      }
      return { success: true, message: '已登出' }
    },
    
    // 结账下单
    async checkout() {
      // 检查用户是否已登录
      if (!this.isAuthenticated) {
        return { success: false, message: '请先登录' }
      }
      
      // 检查购物车是否为空
      if (this.cart.length === 0) {
        return { success: false, message: '购物车为空' }
      }
      
      // 模拟API请求延迟
      await new Promise(resolve => setTimeout(resolve, 800))
      
      // 创建订单
      const order = {
        id: Date.now(),
        userId: this.user.id,
        items: [...this.cart],
        totalAmount: this.cartTotalPrice,
        date: new Date(),
        status: 'completed'
      }
      
      // 添加到订单历史
      this.orderHistory.push(order)
      
      // 增加用户积分（假设消费1元获得0.1积分）
      this.user.points += Math.floor(this.cartTotalPrice * 0.1)
      
      // 清空购物车（但不恢复库存，因为已经购买了）
      this.cart = []
      
      return { 
        success: true, 
        message: '订单已完成', 
        order 
      }
    }
  }
})
